Модуль graph и создание графики на Паскале

 

Библиотека graphABC подключается стандартным способом с помощью директивы uses в разделе описаний программ:

uses graphABC;

В графическом  режиме, который в современных операционных системах типа Windows является основным, экран представляет собой матрицу точек (пикселов), причем имеется возможность высветить любой пиксел любым цветом. Координаты каждого пиксела определяются парой целых чисел:

– координата x -- номер пиксела в строке. Нумерация выполняется слева направо, начиная с 0;

– координата y -- номер строки пикселов. Нумерация строк производится сверху вниз, начиная с 0.

Таким образом,  координаты левого верхнего угла экрана равны (0, 0).

Любой объект, высвечиваемый на экране, является совокупностью отдельных пикселов. Количество воспроизводимых пикселов по горизонтали и вертикали зависит от типа монитора и установленного графического режима. Каждый монитор может использовать множество режимов, отличающихся количеством поддерживаемых цветов и разрешением графического экрана в пикселах.

Рассмотрим основные стандартные процедуры и функции модуля graph.

close;

— процедура без параметров, завершает работу в графическом режиме. Следует выполнять эту процедуру перед завершением любой графической программы на Паскале.

clear;

— процедура без параметров, очищает экран. При переходе в графический режим экран очищается автоматически, так что перед началом вывода эта операция не требуется.

procedure Circle(x,y,r: integer); Рисует заполненную окружность с центром (x,y) и радиусом r;

procedure Arc(x,y,r,a1,a2: integer); Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)

procedure LineTo(x,y: integer); Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y);

procedure MoveTo(x,y: integer); Устанавливает текущую позицию рисования в точку (x,y);

procedure Line(x1,y1,x2,y2: integer); Рисует отрезок от точки (x1,y1) до точки (x2,y2);

procedure FillCircle(x,y,r: integer); Заполняет внутренность окружности с центром (x,y) и радиусом r;

procedure DrawCircle(x,y,r: integer); Рисует окружность с центром (x,y) и радиусом r;

procedure TextOut(x,y: integer; s: string); Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y);

procedure TextOut(x,y: integer; n: integer); Выводит целое n в прямоугольник к координатами левого верхнего угла (x,y);

procedure TextOut(x,y: integer; r: real);         Выводит вещественное r в прямоугольник к координатами левого верхнего угла (x,y);

procedure DrawTextCentered(x,y,x1,y1: integer; s: string);  Выводит строку s, отцентрированную в прямоугольнике с координатами (x,y,x1,y1);

procedure DrawTextCentered(x,y,x1,y1: integer; r: real);         Выводит вещественное значение r, отцентрированное в прямоугольнике с координатами (x,y,x1,y1);

function PenX: integer; Возвращают x-координату текущей позиции рисования;

function PenY: integer; Возвращают y-координату текущей позиции рисования;

 

Следующая процедура определяет стиль рисования линий:

 

Текущее перо Pen

Объект текущего пера возвращается функцией Pen и имеет тип GraphABCPen:

function Pen: GraphABCPen;

Класс GraphABCPen имеет следующий интерфейс:

type
  GraphABCPen = class
    property NETPen: System.Drawing.Pen;
    property Color: GraphABC.Color;
    property Width: integer;
    property Style:
DashStyle;
    property Mode: integer;
    property X: integer;
    property Y: integer;
  end;

Свойства класса GraphABCPen описаны в следующей таблице:

property NETPen: System.Drawing.Pen;
        Текущее перо .NET. Служит для более тонкой настройки свойств пера

property Color: GraphABC.Color;
        
Цвет пера

property Width: integer;
        
Ширина пера

property Style: DashStyle;
        
Стиль пера. Константы стилей пера приведены здесь 

 

Стили пера

Стили пера задаются перечислимым типом DashStyle. Кроме того, для стилей пера определены следующие константы:

psSolid = DashStyle.Solid;
        Сплошное перо

psClear = DashStyle.Clear;
        Прозрачное перо

psDash = DashStyle.Dash;
        Штриховое перо

psDot = DashStyle.Dot;
        Пунктирное перо

psDashDot = DashStyle.DashDot;
        Штрихунктирное перо

psDashDotDot = DashStyle.DashDotDot;
        Альтернативное штрихунктирное перо

property Mode: integer;
        
Режим пера

property X: integer;
        Координата X пера (только чтение)

property Y: integer;
        Координата Y пера (только чтение)

Пример.

Pen.Color := clRed;
Pen.Style := psDot;

В библиотеке graph нет процедур для вывода численных данных. Для этого необходимо сначала преобразовать число в строку с помощью процедуры str, а затем посредством операции '+' подключить строку к сообщению, выводимому процедурой textout. Например:

uses graphABC;

var max,u,rad,y2,x2:real;smax:string;

begin

max:=34.56; {Число}

str(max:6:2,smax);

 {Преобразование числа max в строку smax}

textout(400,40,'Максимум=' + smax);

 {Вывод строки smax с комментарием}

end.

 

Узнать ширину и высоту строки в пикселах можно с помощью стандартных функций function textwidth (s: string):word; и function textheight (s: string):word; соответственно.

Приведем пример программы, реализующeй типовые графические построения.

1. Реализация процедуры, выводящей строку текста в центр прямоугольного окна на экране.

 

var cx,cy,r:integer;

begin

Rectangle (x1,y1,x2,y2); {Рамка}

 rectangle (x1+2,y1+2,x2-2,y2-2);

 cx:=(x1+ x2) div 2;        {Координаты}

 cy:=(y1+ y2) div 2;        {центра}

 TextOut (cx,cy,str); {Вывод строки}

end;

 

{ Обращение к данной процедуре: }

begin

Circle(50,50,15);

Arc(50,50,20,0,45);

Line(PenX,penY,350,350);

outstring (100, 100, 200, 200, 'Hello!');

end.